An application upgrade normally involves both code and database changes. Traditionally, during an application upgrade, the application is shut down to enable changes to database objects and to upgrade application program(s) that had been modified. The database objects and the application program(s) are typically changed at the same time. Upgrading an application can be very difficult and time consuming. However, some systems, such as a customer support system, must be available most of, if not all, the time. For reasons of availability, a long downtime to upgrade the application is undesirable. There is a need to minimize downtimes or to maintain continuous operations during scheduled maintenance sessions.
Oracle's Edition-Based Redefinition (EBR) is a solution that reduces downtime during an application upgrade. In particular, EBR allows an administrator to make physical schema changes while the pre-upgrade application is online. Only once all changes are completed and tested is the post-upgrade application made available to users.
While EBR allows for installation of a post-upgrade application with reduced application downtime, EBR still leaves a gap in implementing online upgrades. EBR allows only structural changes to a table, such as adding and deleting columns. Data within the table cannot be versioned. Yet, there are times when a post-upgrade application relies on a set of data that is different from what its pre-upgrade application relies on. A new column can be added to the table and its data relied on by the post-upgrade application. The pre-upgrade application does not see this new column and is unaffected by this change. However, this solution is not ideal as the amount of data in the table can become large and complex very fast. Cleaning up thereafter to remove unused column(s) can be a long, tedious and difficult task, especially if numerous tables are involved. Care must be given when removing a column(s) since a previous version of the application may still be running that relies on the data in that column(s), causing the previous version of the application to operate in an improper manner or abnormally terminate if that column(s) is removed from the table.